/************************************************************************
 * Este archivo, representa metodos y variables relacionadas con el alta, 
 * baja y modificacion de usuarios y administradores del sistema
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/

package SistemaCocheras;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;


public class manejadorUsuarioAdmin {

    private Connection conexion = null;
    
    
    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // ---------------------------------------------------------      

    /**
     * Constructor NO vacio
     */ 
    public manejadorUsuarioAdmin(Connection c){
        this.conexion = c;
    }
    
    
    // ---------------------------------------------------------
    // ------- Seccion de metodos publicos
    // ---------------------------------------------------------    

    /**
     * Metodo encargado de buscar el usuario correspondiente al dni pasado
     * como parametro
     * @param dniU Representa el dni del usuario o administrador
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarUsuarioAdmin(String dniU) throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM usuario WHERE(dniusuario ='"+dniU+"')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarUsuarioAdmin


    /**
     * Metodo encargado de buscar un usuario en particular a partir de su dni
     * @param dniU Representa el dni del usuario
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarUsuarioPorDni(String dniU) throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM usuario WHERE(dniusuario ='"+dniU+"' and esadministrador = '0')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarUsuarioPorDni

    
    /**
     * Metodo encargado de buscar un administrador en particular a partir de su dni
     * @param dniU Representa el dni del administrador
     * @return res
     * @throws SQLException 
     */
    public ResultSet buscarAdministradorPorDni(String dniU) throws SQLException{
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM usuario WHERE(dniusuario ='"+dniU+"' and esadministrador = '1')";
        res = statemen.executeQuery(query);
        return res;
    }// Fin buscarUsuarioPorDni


    /**
     * Metodo encargado de controlar si el usuario correspondiente cuyo dni 
     * coincide con el pasado como parametro es administrador o no
     * @param dniU Representa el dni del usuario a controlar
     * @return esAdmin
     * @throws SQLException 
     */
    public boolean esAdministrador(String dniU) throws SQLException{
        boolean esAdmin = false;
        ResultSet res = null;
        Statement statemen = this.conexion.createStatement();
        String query = "SELECT * FROM usuario WHERE(dniusuario ='"+dniU+"' and esadministrador = '1')";
        res = statemen.executeQuery(query);
        if(res.next()){
            esAdmin = true;
        }
        return esAdmin;
    }// Fin esAdministrador

    
    /**
     * Metodo encargado de insertar un nuevo usuario en la base de datos
     * @param dniU Representa el dni del nuevo usuario
     * @param nombreU Representa el nombre del nuevo usuario
     * @param apellidoU Representa el apellido del nuevo usuario
     * @param edadU Representa la edad del nuevo usuario
     * @param direccionU Representa la direccion del nuevo usuario
     * @param telefonoU Representa el telefono del nuevo usuario
     * @param contraseniaU Representa la contrasenia el nuevo usuario
     * @throws IOException
     * @throws SQLException 
     */
    public void insertarUsuario(String dniU, String nombreU, String apellidoU, int edadU, String direccionU, 
                                String telefonoU, String contraseniaU) throws IOException, SQLException {
      Statement statemen = this.conexion.createStatement();
      String query = "INSERT INTO usuario VALUES('"+dniU+"', '"+nombreU+"', '"+apellidoU+"', '"+direccionU+"', '"+edadU+"', '"+telefonoU+"', '"+contraseniaU+"','0')";
      statemen.executeUpdate(query);
    }// Fin insertarUsuario


    /**
     * Metodo encargado de insertar un nuevo administrador en la base de datos
     * @param dniU Representa el dni del nuevo administrador
     * @param nombreU Representa el nombre del nuevo administrador
     * @param apellidoU Representa el apellido del nuevo administrador
     * @param edadU Representa la edad del nuevo administrador
     * @param direccionU Representa la direccion del nuevo administrador
     * @param telefonoU Representa el telefono del nuevo administrador
     * @param contraseniaU Representa la contrasenia el nuevo administrador
     * @throws IOException
     * @throws SQLException 
     */
    public void insertarAdministrador(String dniU, String nombreU, String apellidoU, int edadU, String direccionU, 
                                      String telefonoU, String contraseniaU) throws IOException, SQLException {
      Statement statemen = this.conexion.createStatement();
      String query = "INSERT INTO usuario VALUES('"+dniU+"', '"+nombreU+"', '"+apellidoU+"', '"+direccionU+"', '"+edadU+"', '"+telefonoU+"', '"+contraseniaU+"','1')";
      statemen.executeUpdate(query);
    }// Fin insertarUsuario


    /**
     * Metodo encargado de eliminar un usuario en particular
     * @param dniU Representa el dni del usuario a eliminar
     * @throws SQLException 
     */
    public void eliminarUsuario (String dniU) throws SQLException{
        if (!dniU.equals("0000")){
            // Si no es el admin principal
            Statement statemen = this.conexion.createStatement();
            String query = "UPDATE caja SET dniusuariocaja = '0000' WHERE dniusuariocaja = '"+dniU+ "'";
            statemen.executeUpdate(query);
            String query2 = "DELETE FROM usuario WHERE(dniusuario ='"+dniU+"')";
            statemen.executeUpdate(query2);
         }
         else{
            JOptionPane.showMessageDialog(null,"No se puede eliminar administrador general", "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
         }
    }// Fin eliminarUsuario


    /**
     * Metodo encargado de actualizar los datos de un usuario en particular
     * @param dniViejo Representa el dni previo a la actualizacion
     * @param dniU Representa el nuevo dni del usuario
     * @param nombreU Representa el nuevo nombre del usuario
     * @param apellidoU Representa el nuevo apellido del usuario
     * @param edadU Representa la nueva edad del usuario
     * @param direccionU Representa la nueva direccion del usuario
     * @param telefonoU Representa el nuevo telefono del usuario
     * @param pass Representa la nuevo contrasenia del usuario
     * @throws IOException
     * @throws SQLException 
     */
    public void actualizarUsuario(String dniViejo, String dniU, String nombreU, String apellidoU, int edadU, 
                                  String direccionU, String telefonoU, String pass) throws IOException, SQLException{
        if (!dniU.equals("0000")){
            Statement statemen = this.conexion.createStatement();
            String query = "UPDATE usuario SET dniusuario='"+dniU+"', nombre='"+nombreU+"', apellido='"+apellidoU+"', direccion='"+direccionU+"'," +
                           " edad='"+edadU+"', telefono='"+telefonoU+"', pass='"+pass+"' WHERE dniusuario='"+dniViejo+"'";
            statemen.executeUpdate(query);
        }
        else{
            Statement statemen = this.conexion.createStatement();
            String query = "UPDATE usuario SET dniusuario='0000', nombre='"+nombreU+"', apellido='"+apellidoU+"', direccion='"+direccionU+"'," +
                           " edad='"+edadU+"', telefono='"+telefonoU+"', pass='"+pass+"' WHERE dniusuario='"+dniViejo+"'";
            statemen.executeUpdate(query);
         }
    }// Fin actualizarUsuario

}// Fin clase manejadorUsuarioAdmin